home *** CD-ROM | disk | FTP | other *** search
/ Czech Logic, Card & Gambling Games / Logické hry.iso / hry / Fish Fillets / script / cancan / code.lua next >
Text File  |  2005-07-16  |  16KB  |  479 lines

  1.  
  2. -- -----------------------------------------------------------------
  3. -- Init
  4. -- -----------------------------------------------------------------
  5. local function prog_init()
  6.     initModels()
  7.     local pokus = getRestartCount()
  8.  
  9.  
  10.     -- -------------------------------------------------------------
  11.     local function prog_init_room()
  12.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  13.  
  14.         room.druh = 1
  15.  
  16.     end
  17.  
  18.     -- -------------------------------------------------------------
  19.     local function prog_init_krab1()
  20.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  21.  
  22.         krab1.ceka = 10
  23.         krab1.krok = 0
  24.  
  25.         return function()
  26.             krab1.muze = 0
  27.             krab2.muze = 0
  28.             krab3.muze = 0
  29.             krab4.muze = 0
  30.             if krab2.Y == krab1.Y and dist(krab1, krab2) == 1 then
  31.                 krab1.muze = 1
  32.                 krab2.muze = 1
  33.             end
  34.             if krab3.Y == krab1.Y and dist(krab1, krab3) == 1 then
  35.                 krab1.muze = 1
  36.                 krab3.muze = 1
  37.             end
  38.             if krab4.Y == krab1.Y and dist(krab1, krab4) == 1 then
  39.                 krab1.muze = 1
  40.                 krab4.muze = 1
  41.             end
  42.             if krab3.Y == krab2.Y and dist(krab2, krab3) == 1 then
  43.                 krab2.muze = 1
  44.                 krab3.muze = 1
  45.             end
  46.             if krab4.Y == krab2.Y and dist(krab2, krab4) == 1 then
  47.                 krab2.muze = 1
  48.                 krab4.muze = 1
  49.             end
  50.             if krab4.Y == krab3.Y and dist(krab3, krab4) == 1 then
  51.                 krab3.muze = 1
  52.                 krab4.muze = 1
  53.             end
  54.             if math.mod(game_getCycles(), 2) == 0 then
  55.                 if krab1.krok == 7 then
  56.                     krab1.krok = 0
  57.                 else
  58.                     krab1.krok = krab1.krok + 1
  59.                 end
  60.             end
  61.             if krab1.ceka > 0 then
  62.                 krab1.ceka = krab1.ceka - 1
  63.             end
  64.             if krab1.dir ~= dir_no or not klavir:isTalking() then
  65.                 krab1.ceka = 20
  66.             end
  67.             if krab1.muze == 1 and krab1.ceka == 0 and klavir:isTalking() then
  68.                 if room.druh == 0 then
  69.                     if isIn(krab1.krok, {1, 3, 5, 7}) then
  70.                         krab1.afaze = 7
  71.                     elseif isIn(krab1.krok, {2, 4, 6, 0})then
  72.                         krab1.afaze = 9
  73.                     end
  74.                 else
  75.                     switch(krab1.krok){
  76.                         [0] = function()
  77.                             krab1.afaze = 6
  78.                         end,
  79.                         [2] = function()
  80.                             krab1.afaze = 7
  81.                         end,
  82.                         [4] = function()
  83.                             krab1.afaze = 8
  84.                         end,
  85.                         [6] = function()
  86.                             krab1.afaze = 9
  87.                         end,
  88.                         default = function()
  89.                             krab1.afaze = 0
  90.                         end,
  91.                     }
  92.                 end
  93.             elseif krab1.afaze > 5 or math.mod(game_getCycles(), 3) == 0 and random(100) < 40 then
  94.                 krab1.afaze = random(6)
  95.             end
  96.             krab1:updateAnim()
  97.         end
  98.     end
  99.  
  100.     -- -------------------------------------------------------------
  101.     local function prog_init_krab2()
  102.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  103.  
  104.         krab2.ceka = 20
  105.  
  106.         return function()
  107.             if krab2.ceka > 0 then
  108.                 krab2.ceka = krab2.ceka - 1
  109.             end
  110.             if krab2.dir ~= dir_no or not klavir:isTalking() then
  111.                 krab2.ceka = 20
  112.             end
  113.             if krab2.muze == 1 and krab2.ceka == 0 and klavir:isTalking() then
  114.                 if room.druh == 0 then
  115.                     if isIn(krab1.krok, {1, 3, 5, 7}) then
  116.                         krab2.afaze = 7
  117.                     elseif isIn(krab1.krok, {2, 4, 6, 0})then
  118.                         krab2.afaze = 9
  119.                     end
  120.                 else
  121.                     switch(krab1.krok){
  122.                         [0] = function()
  123.                             krab2.afaze = 6
  124.                         end,
  125.                         [2] = function()
  126.                             krab2.afaze = 7
  127.                         end,
  128.                         [4] = function()
  129.                             krab2.afaze = 8
  130.                         end,
  131.                         [6] = function()
  132.                             krab2.afaze = 9
  133.                         end,
  134.                         default = function()
  135.                             krab2.afaze = 0
  136.                         end,
  137.                     }
  138.                 end
  139.             elseif krab2.afaze > 5 or math.mod(game_getCycles(), 3) == 0 and random(100) < 40 then
  140.                 krab2.afaze = random(6)
  141.             end
  142.             krab2:updateAnim()
  143.         end
  144.     end
  145.  
  146.     -- -------------------------------------------------------------
  147.     local function prog_init_krab3()
  148.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  149.  
  150.         krab3.ceka = 30
  151.  
  152.         return function()
  153.             if krab3.ceka > 0 then
  154.                 krab3.ceka = krab3.ceka - 1
  155.             end
  156.             if krab3.dir ~= dir_no or not klavir:isTalking() then
  157.                 krab3.ceka = 20
  158.             end
  159.             if krab3.muze == 1 and krab3.ceka == 0 and klavir:isTalking() then
  160.                 if room.druh == 0 then
  161.                     if isIn(krab1.krok, {1, 3, 5, 7}) then
  162.                         krab3.afaze = 7
  163.                     elseif isIn(krab1.krok, {2, 4, 6, 0})then
  164.                         krab3.afaze = 9
  165.                     end
  166.                 else
  167.                     switch(krab1.krok){
  168.                         [0] = function()
  169.                             krab3.afaze = 6
  170.                         end,
  171.                         [2] = function()
  172.                             krab3.afaze = 7
  173.                         end,
  174.                         [4] = function()
  175.                             krab3.afaze = 8
  176.                         end,
  177.                         [6] = function()
  178.                             krab3.afaze = 9
  179.                         end,
  180.                         default = function()
  181.                             krab3.afaze = 0
  182.                         end,
  183.                     }
  184.                 end
  185.             elseif krab3.afaze > 5 or math.mod(game_getCycles(), 3) == 0 and random(100) < 40 then
  186.                 krab3.afaze = random(6)
  187.             end
  188.             krab3:updateAnim()
  189.         end
  190.     end
  191.  
  192.     -- -------------------------------------------------------------
  193.     local function prog_init_krab4()
  194.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  195.  
  196.         krab4.ceka = 40
  197.  
  198.         return function()
  199.             if krab4.ceka > 0 then
  200.                 krab4.ceka = krab4.ceka - 1
  201.             end
  202.             if krab4.dir ~= dir_no or not klavir:isTalking() then
  203.                 krab4.ceka = 20
  204.             end
  205.             if krab4.muze == 1 and krab4.ceka == 0 and klavir:isTalking() then
  206.                 if room.druh == 0 then
  207.                     if isIn(krab1.krok, {1, 3, 5, 7}) then
  208.                         krab4.afaze = 7
  209.                     elseif isIn(krab1.krok, {2, 4, 6, 0})then
  210.                         krab4.afaze = 9
  211.                     end
  212.                 else
  213.                     switch(krab1.krok){
  214.                         [0] = function()
  215.                             krab4.afaze = 6
  216.                         end,
  217.                         [2] = function()
  218.                             krab4.afaze = 7
  219.                         end,
  220.                         [4] = function()
  221.                             krab4.afaze = 8
  222.                         end,
  223.                         [6] = function()
  224.                             krab4.afaze = 9
  225.                         end,
  226.                         default = function()
  227.                             krab4.afaze = 0
  228.                         end,
  229.                     }
  230.                 end
  231.             elseif krab4.afaze > 5 or math.mod(game_getCycles(), 3) == 0 and random(100) < 40 then
  232.                 krab4.afaze = random(6)
  233.             end
  234.             krab4:updateAnim()
  235.         end
  236.     end
  237.  
  238.     -- -------------------------------------------------------------
  239.     local function prog_init_klavir()
  240.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  241.  
  242.         klavir.ruce = 0
  243.         klavir.otocka = -random(100) - 100
  244.         klavir.vyruseni = 0
  245.  
  246.         return function()
  247.             if klavir.dir ~= dir_no then
  248.                 klavir:killSound()
  249.                 klavir.vyruseni = 20 + random(25)
  250.             end
  251.             if klavir.vyruseni > 0 then
  252.                 if no_dialog() then
  253.                     klavir.vyruseni = klavir.vyruseni - 1
  254.                     if klavir.vyruseni == 0 then
  255.                         klavir:talk("kan-klavir-music", VOLUME_LOW, -1)
  256.                     end
  257.                 end
  258.                 if random(100) < 3 then
  259.                     klavir.afaze = 8
  260.                 else
  261.                     klavir.afaze = 6
  262.                 end
  263.             else
  264.                 if not klavir:isTalking() then
  265.                     klavir:talk("kan-klavir-music", VOLUME_LOW, -1)
  266.                 end
  267.                 if klavir.otocka > 0 and klavir.mrknuti > 0 then
  268.                     if klavir.ruce == 0 then
  269.                         klavir.ruce = 2
  270.                     elseif klavir.ruce == 2 then
  271.                         klavir.ruce = 0
  272.                     else
  273.                         klavir.ruce = random(2) * 2
  274.                     end
  275.                     klavir.afaze = 8 + math.floor(klavir.ruce / 2)
  276.                     klavir.mrknuti = klavir.mrknuti - 1
  277.                     klavir.otocka = klavir.otocka - 1
  278.                 else
  279.                     klavir.ruce = math.mod(klavir.ruce + random(3) + 1, 4)
  280.                     if klavir.otocka > 0 then
  281.                         klavir.afaze = 4 + klavir.ruce
  282.                         if random(100) < 7 then
  283.                             klavir.mrknuti = 1 + random(4)
  284.                         end
  285.                         klavir.otocka = klavir.otocka - 1
  286.                     else
  287.                         klavir.afaze = klavir.ruce
  288.                         klavir.otocka = klavir.otocka + 1
  289.                         if klavir.otocka == 0 then
  290.                             klavir.otocka = random(10) + 50
  291.                             klavir.mrknuti = 0
  292.                         end
  293.                     end
  294.                 end
  295.                 if klavir.otocka == 0 then
  296.                     klavir.otocka = -random(300) - 150
  297.                 end
  298.             end
  299.             klavir:updateAnim()
  300.         end
  301.     end
  302.  
  303.     -- -------------------------------------------------------------
  304.     local function prog_init_sepie()
  305.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  306.  
  307.         sepie.mrk = 0
  308.         sepie.nohy = 0
  309.  
  310.         return function()
  311.             pomb1 = sepie.dir == dir_down
  312.             pomb2 = isWater(sepie.X, sepie.Y + 1) and isWater(sepie.X + 1, sepie.Y + 1) and not isWater(sepie.X + 2, sepie.Y + 3)
  313.             if sepie.mrk > 0 then
  314.                 sepie.mrk = sepie.mrk - 1
  315.             elseif random(100) < 15 then
  316.                 sepie.mrk = random(3) + 2
  317.             end
  318.             if pomb1 or not pomb2 then
  319.                 if odd(game_getCycles()) then
  320.                     sepie.nohy = math.mod(sepie.nohy + 2 + random(2) * 2, 3)
  321.                 end
  322.                 sepie.afaze = sepie.nohy
  323.                 if pomb1 then
  324.                     sepie.afaze = sepie.nohy + 3
  325.                 elseif sepie.mrk > 0 then
  326.                     sepie.afaze = sepie.nohy + 6
  327.                 else
  328.                     sepie.afaze = sepie.nohy
  329.                 end
  330.             else
  331.                 if sepie.dir == dir_left or sepie.dir == dir_down then
  332.                     sepie.nohy = math.mod(sepie.nohy + 1, 2)
  333.                 else
  334.                     sepie.nohy = 0
  335.                 end
  336.                 if sepie.mrk > 0 then
  337.                     sepie.afaze = 2 * sepie.nohy + 10
  338.                 else
  339.                     sepie.afaze = 2 * sepie.nohy + 9
  340.                 end
  341.             end
  342.             sepie:updateAnim()
  343.         end
  344.     end
  345.  
  346.     -- -------------------------------------------------------------
  347.     local function prog_init_rejnok()
  348.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  349.  
  350.         rejnok.pozice = 0
  351.         rejnok.nespi = 0
  352.  
  353.         return function()
  354.             if math.mod(game_getCycles(), 2) == 0 or rejnok.nespi > 20 then
  355.                 if rejnok.pozice == 5 then
  356.                     rejnok.pozice = 0
  357.                 else
  358.                     rejnok.pozice = rejnok.pozice + 1
  359.                 end
  360.                 if rejnok.dir ~= dir_no then
  361.                     rejnok.nespi = random(60) + 20
  362.                 end
  363.                 if rejnok.nespi > 0 then
  364.                     if random(100) < 13 then
  365.                         rejnok.afaze = rejnok.pozice
  366.                     else
  367.                         rejnok.afaze = rejnok.pozice + 6
  368.                     end
  369.                     rejnok.nespi = rejnok.nespi - 1
  370.                 else
  371.                     rejnok.afaze = rejnok.pozice
  372.                 end
  373.             end
  374.             rejnok:updateAnim()
  375.         end
  376.     end
  377.  
  378.     -- -------------------------------------------------------------
  379.     local function prog_init_sasanka()
  380.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  381.  
  382.         sasanka.noha = 0
  383.         sasanka.kvet = 0
  384.  
  385.         return function()
  386.             if isWater(sasanka.X, sasanka.Y - 1) then
  387.                 local cycle = math.mod(game_getCycles(), 8)
  388.                 if isIn(cycle, {0, 1, 2, 3}) then
  389.                     sasanka.noha = 0
  390.                 else
  391.                     sasanka.noha = 1
  392.                 end
  393.                 if isIn(cycle, {0, 3, 4, 7}) then
  394.                     sasanka.kvet = 1
  395.                 else
  396.                     sasanka.kvet = 0
  397.                 end
  398.                 sasanka.afaze = sasanka.noha * 4 + sasanka.kvet + 1
  399.             else
  400.                 sasanka.afaze = 1
  401.             end
  402.             sasanka:updateAnim()
  403.         end
  404.     end
  405.  
  406.     -- -------------------------------------------------------------
  407.     local function prog_init_big()
  408.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  409.  
  410.         big.ptalnyni = 0
  411.  
  412.         return function()
  413.             if big.ptalnyni == 1 and klavir:isTalking() then
  414.                 big.ptalnyni = 0
  415.             elseif big.ptalnyni == 0 and not klavir:isTalking() and random(1000) < 15 then
  416.                 big.ptalnyni = 1
  417.                 addv(3, "kan-v-proc")
  418.             end
  419.         end
  420.     end
  421.  
  422.     -- --------------------
  423.     local update_table = {}
  424.     local subinit
  425.     subinit = prog_init_room()
  426.     if subinit then
  427.         table.insert(update_table, subinit)
  428.     end
  429.     subinit = prog_init_krab1()
  430.     if subinit then
  431.         table.insert(update_table, subinit)
  432.     end
  433.     subinit = prog_init_krab2()
  434.     if subinit then
  435.         table.insert(update_table, subinit)
  436.     end
  437.     subinit = prog_init_krab3()
  438.     if subinit then
  439.         table.insert(update_table, subinit)
  440.     end
  441.     subinit = prog_init_krab4()
  442.     if subinit then
  443.         table.insert(update_table, subinit)
  444.     end
  445.     subinit = prog_init_klavir()
  446.     if subinit then
  447.         table.insert(update_table, subinit)
  448.     end
  449.     subinit = prog_init_sepie()
  450.     if subinit then
  451.         table.insert(update_table, subinit)
  452.     end
  453.     subinit = prog_init_rejnok()
  454.     if subinit then
  455.         table.insert(update_table, subinit)
  456.     end
  457.     subinit = prog_init_sasanka()
  458.     if subinit then
  459.         table.insert(update_table, subinit)
  460.     end
  461.     subinit = prog_init_big()
  462.     if subinit then
  463.         table.insert(update_table, subinit)
  464.     end
  465.     return update_table
  466. end
  467. local update_table = prog_init()
  468.  
  469.  
  470. -- -----------------------------------------------------------------
  471. -- Update
  472. -- -----------------------------------------------------------------
  473. function prog_update()
  474.     for key, subupdate in pairs(update_table) do
  475.         subupdate()
  476.     end
  477. end
  478.  
  479.